/*
 *    This file is part of SSHTunneler.
 *
 *    Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
 *
 *    SSHTunneler is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation, either version 3 of the License, or
 *    (at your option) any later version.
 *
 *    SSHTunneler is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with SSHTunneler.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package sshtunneler.packager.data;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import sshtunneler.tools.Tool;

public class Config {
	public final static Config inst = new Config();

	/*** Config ***/
	public String installerdir_path = "../export";
	public String tunnelerdir_path = "../export";
	public String toolsdir_path = "../export/tools";

	/*** Tools ***/
	public List<Tool> tools = new ArrayList<Tool>();

	private Config() {
		/* Check for the default paths ... 
		 * ../export: when executing from eclipse
		 * ./: when executing from exported directory
		 **/
		
		if (!validate_config())
		{
			installerdir_path = "./";
			tunnelerdir_path = "./";
			toolsdir_path = "./tools";
		}
	}

	public boolean validate_config() {
		return this.validate_tunneler() && this.validate_installer()
				&& this.validate_tools_directory();
	}

	public boolean validate_tools_directory() {
		return this.getToolsFile(this.toolsdir_path).exists()
				&& this.getToolsFile(this.toolsdir_path).isDirectory();
	}

	public boolean validate_tunneler() {
		if (this.tunnelerdir_path == null) {
			return false;
		}
		return this.getTunnelerFile(this.tunnelerdir_path).exists();
	}

	public boolean validate_installer() {
		if (this.installerdir_path == null) {
			return false;
		}
		return this.getInstallerFile(this.installerdir_path).exists();
	}

	public File getTunnelerFile(String path) {
		return new File(path + File.separator + "SSHTunneler.jar");
	}

	public File getToolsFile(String path) {
		return new File(path + File.separator);
	}

	public File getInstallerFile(String path) {
		return new File(path + File.separator + "SSHTunnelerInstaller.jar");
	}

	public File getDefaultInstallerFile() {
		return this.getInstallerFile(this.installerdir_path);
	}

	public File getDefaultTunnelerFile() {
		return this.getTunnelerFile(this.tunnelerdir_path);
	}

	public File getDefaultToolsFile() {
		return this.getTunnelerFile(this.toolsdir_path);
	}
}
